package com.jzoffer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class StringOrder {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        ArrayList<String> res = Permutation(str);
        Collections.sort(res);
        for(int i = 0;i < res.size();i++){
            System.out.println(res.get(i));
        }
        sc.close();

    }

    public static ArrayList<String> Permutation(String str){
        ArrayList<String> res = new ArrayList<>();
        if(str == null || str.length() < 1){
            return res;
        }
        subPermutation(str.toCharArray(),0,res);
        return res;
    }

    private static void subPermutation(char[] ch,int i,ArrayList<String> res){
        // 递归结束条件 当交换到最后一个字符的时候
        if(i == ch.length - 1) {
            String r = String.valueOf(ch);
            if (!res.contains(r)) {
                res.add(r);
            }
        }
        else{
                // 否则，从i位置起步，交换字符，并递归进行交换，最后交换回来
                for(int j = i;j < ch.length;j++){
                    swap(ch,i,j);
                    // 当前 i j 位交换后 i + 1 位开始递归交换 交换结束以后要交换回来 不影响之后的交换
                    subPermutation(ch,i+1,res);
                    swap(ch,i,j);
                }
        }

    }

    private static void swap(char[] ch,int i ,int j){
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
    }


}
